package com.cskaoyan.javase.exception._1handle._3throws;

/**
 * @description: 方法重写中, 声明异常抛出列表的问题
 * @author: wuguidong@cskaoyan.onaliyun.com
 **/

import jdk.jfr.events.ExceptionThrownEvent;

import javax.xml.xpath.XPathException;

/**
 * 方法的声明:
 *      [访问权限修饰符][各种修饰符] 返回值类型 方法名(形参列表) throws 异常列表{
 *      }
 * 父子类重写方法声明中的异常的重写原则:
 *      子类不能抛出更多的异常
 *
 * 理解:
 *      1.抛出更多的运行时异常算不算更多的异常?
 *          不叫,抛出更多的运行时异常没有意义,也不叫更多
 *
 *      2.抛出更多的编译时异常才算更多的异常
 *
 * 以上,子类不能抛出更多的异常,实际上是不能抛出更多的编译时异常,运行时异常无所谓
 *
 * 假如父类没有抛出任何异常,那么子类:
 *    a.也可以全部不抛出
 *    b.可以抛出运行时异常
 *    c.不能抛出编译时异常
 *
 * 假如父类抛出运行时异常,那么子类:
 *    a.也可以全部不抛出
 *    b.可以抛出运行时异常
 *    c.不能抛出编译时异常
 *
 * 假如父类抛出编译时异常,那么子类:
 *    a.也可以全部不抛出
 *    b.可以抛出运行时异常
 *    c.可以抛出，但是只能抛出父类种已经抛出的编译时异常，不能额外抛出编译时异常
 *      更不能抛出Exception
 *
 * 假如父类抛出Exception,那么子类:
 *     为所欲为
 *
 * 结合多态，思考一下原因是什么？
 *   编译时期看父类的类型，如果父类方法没有抛出编译时异常，而子类抛出了
 *   就会出现矛盾
 *
 */
public class Demo2 {
}
class Father{
    public void test() throws Exception {

    }
}
class Son extends Father{
    @Override
    public void test()  throws Exception {
        //super.test();
    }
}